package com.iot.ammeter.model.parcelable

import android.os.Build
import android.os.Parcel
import android.os.Parcelable
import androidx.annotation.RequiresApi
import com.iot.ammeter.network.NetworkHelper
import com.iot.ammeter.network.ResponseData
import kotlinx.parcelize.Parcelize
import kotlinx.parcelize.WriteWith

/**
 * @param charge 上个月电费与状态
 * @param meter 上个月抄表记录，如果没有绑定设备则为 null
 */
@Parcelize
data class LastMonthInfo(
    val charge: @WriteWith<LastMonthCharge.Parceler> LastMonthCharge,
    val meter: @WriteWith<LastMonthMeter.Parceler> LastMonthMeter?
) : Parcelable, ResponseData

/**
 * 上个月电费
 * @param amount 金额
 * @param status 是否支付
 */
data class LastMonthCharge(val amount: Float, var status: Boolean) {
    /**
     * 提供 [LastMonthCharge] 类型序列化支持
     */
    @RequiresApi(Build.VERSION_CODES.Q)
    object Parceler : kotlinx.parcelize.Parceler<LastMonthCharge> {

        override fun create(parcel: Parcel): LastMonthCharge = LastMonthCharge(
            parcel.readFloat(), parcel.readBoolean()
        )

        override fun LastMonthCharge.write(parcel: Parcel, flags: Int) {
            parcel.writeFloat(amount)
            parcel.writeBoolean(status)
        }
    }
}

/**
 * 上个月抄表记录
 * @param previousPeriod 上期表码
 * @param currentPeriod 当期表码
 */
data class LastMonthMeter(val previousPeriod: Float, val currentPeriod: Float) {
    /**
     * 提供 [LastMonthCharge] 类型序列化支持
     */
    object Parceler : kotlinx.parcelize.Parceler<LastMonthMeter?> {

        override fun create(parcel: Parcel): LastMonthMeter {
            val params = FloatArray(2)
            parcel.readFloatArray(params)
            return LastMonthMeter(params[0], params[1])
        }

        override fun LastMonthMeter?.write(parcel: Parcel, flags: Int) {
            this?.run {
                parcel.writeFloatArray(floatArrayOf(previousPeriod, currentPeriod))
            }
        }
    }
}
